lorom                       ; Using Low Rom, split ROM into 32k chunks

org $008000                 ; START HERE

fillbyte $00 : fill 256000  ; Fill 256,000 bytes to the rom (for copiers)
incsrc heather.asm          ; Include IVT - heather

org $008000
cleartable                  ; Clear the ASCII table built in the assembler
table my_standard.tbl,ltr   ; Load my own table.(make your own table)




;----------------------------DEMO-START---------------------------------------
start:
      sei                   ; Disable interrupts
      clc                   ; Clear carry
      xce                   ; Switch to NATIVE mode
      phk                   ; Push program bank on stack
      plb                   ; Pull STACK ON DATA BANK
      rep #$30              ; Reset Processor status bits
      lda #$0000            ; Make DP = $0000
      tcd
      


; INITIATE ;

	sep 	#$20    ; X,Y 16,A are 8 bit numbers
	lda 	#$80    ; screen off
	sta 	$2100   ; brightness + screen enable register
	stz 	$2101   ; Sprite register (size + address in VRAM)
	stz 	$2102   ; Sprite registers (address of sprite memory [OAM])
	stz 	$2103   ;    ""                       ""
	stz 	$2105   ; Mode 0, = Graphic mode register
	stz 	$2106   ; noplanes, no mosaic, = Mosaic register
	stz 	$2107   ; Plane 0 map VRAM location
	stz 	$2108   ; Plane 1 map VRAM location
	stz 	$2109   ; Plane 2 map VRAM location
	stz 	$210A   ; Plane 3 map VRAM location
	stz 	$210B   ; Plane 0+1 Tile data location
	stz 	$210C   ; Plane 2+3 Tile data location
	stz 	$210D   ; Plane 0 scroll x (first 8 bits)
	stz 	$210D   ; Plane 0 scroll x (last 3 bits) #$0 - #$07ff
	stz 	$210E   ; Plane 0 scroll y (first 8 bits)
	stz 	$210E   ; Plane 0 scroll y (last 3 bits) #$0 - #$07ff
	stz 	$210F   ; Plane 1 scroll x (first 8 bits)
	stz 	$210F   ; Plane 1 scroll x (last 3 bits) #$0 - #$07ff
	stz 	$2110   ; Plane 1 scroll y (first 8 bits)
	stz 	$2110   ; Plane 1 scroll y (last 3 bits) #$0 - #$07ff
	stz 	$2111   ; Plane 2 scroll x (first 8 bits)
	stz 	$2111   ; Plane 2 scroll x (last 3 bits) #$0 - #$07ff
	stz 	$2112   ; Plane 2 scroll y (first 8 bits)
	stz 	$2112   ; Plane 2 scroll y (last 3 bits) #$0 - #$07ff
	stz 	$2113   ; Plane 3 scroll x (first 8 bits)
	stz 	$2113   ; Plane 3 scroll x (last 3 bits) #$0 - #$07ff
	stz 	$2114   ; Plane 3 scroll y (first 8 bits)
	stz 	$2114   ; Plane 3 scroll y (last 3 bits) #$0 - #$07ff
	lda 	#$80    ; increase VRAM address after writing to $2119
	sta 	$2115   ; VRAM address increment register
	stz 	$2116   ; VRAM address low
	stz 	$2117   ; VRAM address high
	stz 	$211A   ; Initial Mode 7 setting register
	stz 	$211B   ; Mode 7 matrix parameter A register (low)
	lda 	#$01
	sta 	$211B   ; Mode 7 matrix parameter A register (high)
	stz 	$211C   ; Mode 7 matrix parameter B register (low)
	stz 	$211C   ; Mode 7 matrix parameter B register (high)
	stz 	$211D   ; Mode 7 matrix parameter C register (low)
	stz 	$211D   ; Mode 7 matrix parameter C register (high)
	stz 	$211E   ; Mode 7 matrix parameter D register (low)
	sta 	$211E   ; Mode 7 matrix parameter D register (high)
	stz 	$211F   ; Mode 7 center position X register (low)
	stz 	$211F   ; Mode 7 center position X register (high)
	stz 	$2120   ; Mode 7 center position Y register (low)
	stz 	$2120   ; Mode 7 center position Y register (high)
	stz 	$2121   ; Color number register ($0-ff)
	stz 	$2123   ; BG1 & BG2 Window mask setting register
	stz 	$2124   ; BG3 & BG4 Window mask setting register
	stz 	$2125   ; OBJ & Color Window mask setting register
	stz 	$2126   ; Window 1 left position register
	stz 	$2127   ; Window 2 left position register
	stz 	$2128   ; Window 3 left position register
	stz 	$2129   ; Window 4 left position register
	stz 	$212A   ; BG1, BG2, BG3, BG4 Window Logic register
	stz 	$212B   ; OBJ, Color Window Logic Register (or,and,xor,xnor)
	sta 	$212C   ; Main Screen designation (planes, sprites enable)
	stz 	$212D   ; Sub Screen designation
	stz 	$212E   ; Window mask for Main Screen
	stz 	$212F   ; Window mask for Sub Screen
	lda 	#$30
	sta 	$2130   ; Color addition & screen addition init setting
	stz 	$2131   ; Add/Sub sub designation for screen, sprite, color
	lda 	#$E0
	sta 	$2132   ; color data for addition/subtraction
	stz 	$2133   ; Screen setting (interlace x,y/enable SFX data)
	stz 	$4200   ; Enable V-blank, interrupt, Joypad register
	lda 	#$FF
	sta 	$4201   ; Programmable I/O port
	stz 	$4202   ; Multiplicand A
	stz 	$4203   ; Multiplier B
	stz 	$4204   ; Multiplier C
	stz 	$4205   ; Multiplicand C
	stz 	$4206   ; Divisor B
	stz 	$4207   ; Horizontal Count Timer
	stz 	$4208   ; Horizontal Count Timer MSB (most significant bit)
	stz 	$4209   ; Vertical Count Timer
	stz 	$420A   ; Vertical Count Timer MSB
	stz 	$420B   ; General DMA enable (bits 0-7)
	stz 	$420C   ; Horizontal DMA (HDMA) enable (bits 0-7)
	stz 	$420D	; Access cycle designation (slow/fast rom)


start2:
       sep #$20          ; A = 8, XY =16
       lda #$80
       sta $2100
       lda #$00
       sta $2105         ; Mode 0 - 2 bitplanes
       lda #$01
       sta $210b         ; Char mem = $1000
       lda #$20
       sta $2107         ; Tilemem = $2000
       lda #$80
       sta $2115         ; Auto Increment On
       
       

       ; PALETTE ;----------------------------
       ; Since I'm using my own font, and no
       ; Graphic conversion tools, I'll load 
       ; My own palette manually.  2 bits per
       ; pixel gives me a total of 4 colors
       ;--------------------------------------
       ; Color 0 = Background
       ;--------------------------------------
       lda #$00
       sta $2121  ; Color 0
       lda #$ff
       sta $2122
       lda #$7f
       sta $2122  ; White

       lda #$00
       sta $2122
       sta $2122  ; Color 1 = black

       lda #$10
       sta $2122
       lda #$07
       sta $2122  ; Color 2 = green

       lda #$0f
       sta $2122
       lda #$01
       sta $2122  ; Color 3 = red
       ;---------------------------------------

       ; This Moves the data into CHAR MEMORY in
       ; VRAM.
       ldx #$1000
       stx $2116
       ldx #$0000
       - lda charset, x
       sta $2118
       lda charset2, x
       sta $2119
       inx
       cpx #$0800
       bne -

        rep #$30    ; 16bit


       ; "Clears" VRAM with the
       ; "white space" character

       ldx #$2000        ; Loads TILEMAP Address
       stx $2116         ; Ready to be written to VRAM
       ldx #$0000
       lda #$0020        ; $20 is the "white space" character
       - sta $2118       ; Store the character in VRAM
        inx
        cpx #$0800
        bne -

        ;text
        rep #$30         ; Reset processor bits
        sep #$20         ; A = 8, XY = 16
        lda #$00
        sta $2115        ; Auto increment off

       ldx #$2000        ; Load TILEMAP Address
       stx $2116         ; Ready to be written to VRAM... Again ;)
       ldx #$0000
      - lda text, x
       sta $2118         ; Load one byte of data to VRAM at a time
       stz $2119
       inx
       cpx #$0400
       bne -




       ;Turns the Screen on
       rep #$30          ; Reset processor bits
       sep #$20          ; A = 8, XY = 16
       lda #$01
       sta $212b         ; Enable BG 1
       lda #$0f
       sta $2100         ; No force blank, fullbrightness
       
       


stop:            ; Loop forever, the program never stops
     bra stop



text:
         ; 32x32 - 8x8 tile screen

         ;"01234567890123456789012345678901" ;1
        db "                                " ;2
        db " HELLO WORLD - MAY 15, 2006     " ;3
        db "--------------------------------" ;4
        db "          BY SPARDA             " ;5
        db " HEY WHATS UP NIGHTCRAWLER      " ;6
        db " HOW ARE YOU? CAN YOU BELIEVE   " ;7
        db " IT? I'VE DONE IT! IN LESS THAN " ;8
        db " 3 MONTHS YES!                  " ;9
        db "--------------------------------" ;0
        db " THANKS GOES OUT TO:            " ;1
        db " BYUU - XKAS ALL THE WAY!       " ;2
        db " VERY COOL ASSEMBLER!           " ;3
        db "                                " ;4
        db " NIGHTCRAWLER                   " ;5
        db " FOR BEING SUCH GREAT HELP      " ;6
        db " WELL...THE ONLY HELP REALLY    " ;7
        db " THANK YOU SO MUCH!             " ;8
        db " NEVISKI                        " ;9
        db " FOR HAVING VERY GOOD           " ;0
        db " COMMENTED CODE, AND FOR HIS    " ;1
        db " PCX2SNES PROGRAM THANKS        " ;2
        db "--------------------------------" ;3
        db " I'VE NEVER CODED IN ASSEMBLER  " ;4
        db " BEFORE...... ;)                " ;5
        db "                                " ;6
        db " SO WHAT DO YOU THINK GUYS      " ;7
        db " THANKS AGAIN NIGHTCRAWLER!!!   " ;8
        db " THIS WAS SO FREAKING DIFFICULT!" ;9




; Actual font data, ready to be written to VRAM

charset:
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;'@'
     db     $00,$3c,$66,$7e,$66,$66,$66,$00 ;'A'
     db     $00,$7c,$66,$7c,$66,$66,$7c,$00 ;'B'
     db     $00,$3c,$66,$60,$60,$66,$3c,$00 ;'C'
     db     $00,$78,$6c,$66,$66,$6c,$78,$00 ;'D'
     db     $00,$7e,$60,$78,$60,$60,$7e,$00 ;'E'
     db     $00,$7e,$60,$78,$60,$60,$60,$00 ;'F'
     db     $00,$3c,$66,$60,$6e,$66,$3c,$00 ;'G'
     db     $00,$66,$66,$7e,$66,$66,$66,$00 ;'H'
     db     $00,$3c,$18,$18,$18,$18,$3c,$00 ;'I'
     db     $00,$1e,$0c,$0c,$0c,$6c,$38,$00 ;'J'
     db     $00,$6c,$78,$70,$78,$6c,$66,$00 ;'K'
     db     $00,$60,$60,$60,$60,$60,$7e,$00 ;'L'
     db     $00,$63,$77,$7f,$6b,$63,$63,$00 ;'M'
     db     $00,$66,$76,$7e,$7e,$6e,$66,$00 ;'N'
     db     $00,$3c,$66,$66,$66,$66,$3c,$00 ;'O'
     db     $00,$7c,$66,$66,$7c,$60,$60,$00 ;'P'
     db     $00,$3c,$66,$66,$66,$3c,$0e,$00 ;'Q'
     db     $00,$7c,$66,$66,$7c,$6c,$66,$00 ;'R'
     db     $00,$3e,$60,$3c,$06,$66,$3c,$00 ;'S'
     db     $00,$7e,$18,$18,$18,$18,$18,$00 ;'T'
     db     $00,$66,$66,$66,$66,$66,$3c,$00 ;'U'
     db     $00,$66,$66,$66,$66,$3c,$18,$00 ;'V'
     db     $00,$63,$63,$6b,$7f,$77,$63,$00 ;'W'
     db     $00,$66,$3c,$18,$3c,$66,$66,$00 ;'X'
     db     $00,$66,$66,$3c,$18,$18,$18,$00 ;'Y'
     db     $00,$7e,$0c,$18,$30,$60,$7e,$00 ;'Z'
     db     $08,$00,$00,$00,$00,$00,$00,$00 ;'['
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;'\'
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;']'
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;'^'
     db     $00,$08,$00,$00,$00,$00,$00,$00 ;'_'
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;' '
     db     $00,$7E,$7E,$3C,$18,$00,$18,$00 ;'!'
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;'"'
     db     $80,$80,$80,$80,$80,$80,$80,$80 ;'#'
     db     $FC,$FE,$FF,$F7,$F7,$FF,$FE,$FC ;'$'
     db     $3E,$42,$4E,$5C,$5C,$4E,$42,$3E ;'%'
     db     $00,$00,$00,$00,$00,$00,$00,$01 ;'&'
     db     $00,$00,$00,$07,$00,$00,$00,$00 ;'''
     db     $00,$04,$08,$08,$08,$08,$04,$00 ;'('
     db     $00,$20,$10,$10,$10,$10,$20,$00 ;')'
     db     $08,$08,$08,$F8,$08,$08,$08,$08 ;'*'
     db     $10,$10,$10,$1F,$10,$10,$10,$10 ;'+'
     db     $10,$10,$20,$C0,$00,$00,$00,$00 ;','
     db     $00,$00,$00,$FF,$00,$00,$00,$00 ;'-'
     db     $00,$00,$00,$00,$00,$18,$18,$00 ;'.'
     db     $00,$00,$00,$FF,$80,$80,$80,$80 ;'/'
     db     $00,$3c,$66,$6e,$76,$66,$3c,$00 ;'0'
     db     $00,$18,$38,$18,$18,$18,$7e,$00 ;'1'
     db     $00,$7c,$06,$0c,$30,$60,$7e,$00 ;'2'
     db     $00,$7e,$06,$1c,$06,$66,$3c,$00 ;'3'
     db     $00,$0e,$1e,$36,$7f,$06,$06,$00 ;'4'
     db     $00,$7e,$60,$7c,$06,$66,$3c,$00 ;'5'
     db     $00,$3e,$60,$7c,$66,$66,$3c,$00 ;'6'
     db     $00,$7e,$06,$0c,$0c,$0c,$0c,$00 ;'7'
     db     $00,$3c,$66,$3c,$66,$66,$3c,$00 ;'8'
     db     $00,$3c,$66,$3e,$06,$66,$3c,$00 ;'9'
     db     $00,$00,$00,$03,$04,$08,$08,$08 ;':'
     db     $00,$80,$80,$F0,$80,$80,$00,$00 ;';'
     db     $80,$80,$80,$FF,$00,$00,$00,$00 ;'<'
     db     $00,$00,$00,$C0,$20,$10,$10,$10 ;'='
     db     $08,$08,$04,$03,$00,$00,$00,$00 ;'>'
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;'?'

charset2:
     db     $00,$3C,$4E,$5E,$5E,$40,$3C,$00 ;'@'
     db     $00,$3c,$66,$7e,$66,$66,$66,$00 ;'A'
     db     $00,$7c,$66,$7c,$66,$66,$7c,$00 ;'B'
     db     $00,$3c,$66,$60,$60,$66,$3c,$00 ;'C'
     db     $00,$78,$6c,$66,$66,$6c,$78,$00 ;'D'
     db     $00,$7e,$60,$78,$60,$60,$7e,$00 ;'E'
     db     $00,$7e,$60,$78,$60,$60,$60,$00 ;'F'
     db     $00,$3c,$66,$60,$6e,$66,$3c,$00 ;'G'
     db     $00,$66,$66,$7e,$66,$66,$66,$00 ;'H'
     db     $00,$3c,$18,$18,$18,$18,$3c,$00 ;'I'
     db     $00,$1e,$0c,$0c,$0c,$6c,$38,$00 ;'J'
     db     $00,$6c,$78,$70,$78,$6c,$66,$00 ;'K'
     db     $00,$60,$60,$60,$60,$60,$7e,$00 ;'L'
     db     $00,$63,$77,$7f,$6b,$63,$63,$00 ;'M'
     db     $00,$66,$76,$7e,$7e,$6e,$66,$00 ;'N'
     db     $00,$3c,$66,$66,$66,$66,$3c,$00 ;'O'
     db     $00,$7c,$66,$66,$7c,$60,$60,$00 ;'P'
     db     $00,$3c,$66,$66,$66,$3c,$0e,$00 ;'Q'
     db     $00,$7c,$66,$66,$7c,$6c,$66,$00 ;'R'
     db     $00,$3e,$60,$3c,$06,$66,$3c,$00 ;'S'
     db     $00,$7e,$18,$18,$18,$18,$18,$00 ;'T'
     db     $00,$66,$66,$66,$66,$66,$3c,$00 ;'U'
     db     $00,$66,$66,$66,$66,$3c,$18,$00 ;'V'
     db     $00,$63,$63,$6b,$7f,$77,$63,$00 ;'W'
     db     $00,$66,$3c,$18,$3c,$66,$66,$00 ;'X'
     db     $00,$66,$66,$3c,$18,$18,$18,$00 ;'Y'
     db     $00,$7e,$0c,$18,$30,$60,$7e,$00 ;'Z'
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;'['
     db     $09,$09,$00,$00,$00,$00,$00,$00 ;'\'
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;']'
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;'^'
     db     $00,$08,$00,$00,$00,$00,$00,$00 ;'_'
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;' '
     db     $00,$7E,$7E,$3C,$18,$00,$18,$00 ;'!'
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;'"'
     db     $80,$80,$80,$80,$80,$80,$80,$80 ;'#'
     db     $FC,$FE,$FF,$F7,$F7,$FF,$FE,$FC ;'$'
     db     $3E,$42,$4E,$5C,$5C,$4E,$42,$3E ;'%'
     db     $00,$00,$00,$00,$00,$00,$00,$01 ;'&'
     db     $00,$00,$00,$07,$00,$00,$00,$00 ;'''
     db     $00,$04,$08,$08,$08,$08,$04,$00 ;'('
     db     $00,$20,$10,$10,$10,$10,$20,$00 ;')'
     db     $08,$08,$08,$F8,$08,$08,$08,$08 ;'*'
     db     $10,$10,$10,$1F,$10,$10,$10,$10 ;'+'
     db     $10,$10,$20,$C0,$00,$00,$00,$00 ;','
     db     $00,$00,$00,$FF,$00,$00,$00,$00 ;'-'
     db     $00,$00,$00,$00,$00,$18,$18,$00 ;'.'
     db     $00,$00,$00,$FF,$80,$80,$80,$80 ;'/'
     db     $00,$3c,$66,$6e,$76,$66,$3c,$00 ;'0'
     db     $00,$18,$38,$18,$18,$18,$7e,$00 ;'1'
     db     $00,$7c,$06,$0c,$30,$60,$7e,$00 ;'2'
     db     $00,$7e,$06,$1c,$06,$66,$3c,$00 ;'3'
     db     $00,$0e,$1e,$36,$7f,$06,$06,$00 ;'4'
     db     $00,$7e,$60,$7c,$06,$66,$3c,$00 ;'5'
     db     $00,$3e,$60,$7c,$66,$66,$3c,$00 ;'6'
     db     $00,$7e,$06,$0c,$0c,$0c,$0c,$00 ;'7'
     db     $00,$3c,$66,$3c,$66,$66,$3c,$00 ;'8'
     db     $00,$3c,$66,$3e,$06,$66,$3c,$00 ;'9'
     db     $00,$00,$00,$03,$04,$08,$08,$08 ;':'
     db     $00,$80,$80,$F0,$80,$80,$00,$00 ;';'
     db     $80,$80,$80,$FF,$00,$00,$00,$00 ;'<'
     db     $00,$00,$00,$C0,$20,$10,$10,$10 ;'='
     db     $08,$08,$04,$03,$00,$00,$00,$00 ;'>'
     db     $00,$00,$00,$00,$00,$00,$00,$00 ;'?'